package com.redoor.app.stake.workflow.service;

import com.redoor.app.stake.workflow.model.BaseWorkorder;
import com.redoor.app.stake.workflow.model.controllerModel.WorkOrderCriteria;
import com.redoor.app.stake.workflow.model.serviceModel.BaseWorkOrderServiceBean;
import com.redoor.app.stake.workflow.model.serviceModel.WorkOrderNumBean;
import com.redoornetwork.framework.mybatis.service.Service;

import java.util.Date;
import java.util.List;

/**
 *  工单处理的基础接口
 *      不同种类工单的增加和修改的通用部分
 * @author ZhangMumu
 * @date 2018/3/31 0031 22:18
 */
public interface BaseWorkorderService extends Service<BaseWorkorder, String> {
    /**  
     *  新增工单
     *   生成工单的通用部分,写入字段:
     *      工单编号:workOrderNo
     *      过期时间:expireAt
     *      创建时间:createdAt
     *      更新时间:updatedAt
     * @author ZhangMumu
     * @date 2018/3/31 0031 22:26  
     * @param
     * @return
     */
    public int insert(BaseWorkorder workorder);
    /**
     *  工单的更新
     *   更新工单通用部分,更新字段:
     *      审核时间:reviewDate
     *      更新时间:updatedAt
     * @author ZhangMumu  
     * @date 2018/3/30 0030 15:58
     * @param
     * @return
     */  
    int update(BaseWorkorder baseWorkorder);
    /**  
     *  生成工单编码  
     *   
     * @author ZhangMumu  
     * @date 2018/3/31 0031 22:33
     * @param
     * @return
     */  
    String genWorkOrdertNo();
    /**
     *  工单过期时间
     *
     * @author ZhangMumu
     * @date 2018/3/31 0031 22:34
     * @param
     * @return
     */
    Date genWorkOrdErexipre(Date today);
    /**
     *  通过目标uuid查维护工单,时间倒序排列
     *
     * @author ZhangMumu
     * @date 2018/4/9 0009 10:19
     * @param
     * @return
     */
    List<BaseWorkorder> findMainApplyByTargetUuid(String targetUuid);
    /**  
     *  通过目标uuid查维护审核工单,时间倒序排列
     *   
     * @author ZhangMumu  
     * @date 2018/4/10 0010 10:13  
     * @param   
     * @return   
     */  
    List<BaseWorkorder> findMainChargeByTargetUuid(String targetUuid);
    /**
     *  查找工单列表
     *
     * @author ZhangMumu
     * @date 2018/3/30 0030 16:41
     * @param
     * @return
     */
    List<BaseWorkOrderServiceBean> qryWorkOrder(WorkOrderCriteria baseWorkorderCriteria);

    /**
     *  查找工单列表数量
     *
     * @author ZhangMumu
     * @date 2018/3/30 0030 16:43
     * @param
     * @return
     */
    int qryWorkOrderNum(WorkOrderCriteria baseWorkorderCriteria);
    /**  
     *  获取工单数量统计
     *   
     * @author ZhangMumu  
     * @date 2018/4/19 0019 16:06
     * @param   
     * @return   
     */  
    WorkOrderNumBean countWorkOrderNum();
}
